#ifndef _PREREQUISITES_HPP_
#define _PREREQUISITES_HPP_

#include <sstream>
#include <fstream>
#include <iostream>
#include <map>
#include <array>
#include <assert.h>
#include <vector>
#include <time.h>
#include <Windows.h>
#include <windef.h>
#include <iomanip>

template <typename T> 
struct vector 
{ 
	typedef typename std::vector<T> type;
	typedef typename std::vector<T>::iterator iterator;
	typedef typename std::vector<T>::const_iterator const_iterator;
}; 

template <typename K, typename V>
struct map
{
    typedef typename std::map<K, V> type;
    typedef typename std::map<K, V>::iterator iterator;
    typedef typename std::map<K, V>::const_iterator const_iterator;
};

typedef std::string _StringBase;
typedef _StringBase String;

typedef float Real;

#define BLOCKS 16
#define BLOCK_SIZE 16
#define WORD_SIZE 4
#define MEMORY_BLOCKS 176

#define _ANSII_NUM 48
#define _ANSII_LET 55

#define MAX_LINE_LENGTH 4

typedef unsigned char Byte;

/** BYTES_IN_WORD
@remark STL array works ONLY WITH C++11.
*/

typedef std::array<Byte, WORD_SIZE> Word;
typedef std::array<Byte, 2> DByte;

typedef vector<Word>::type WordVector;

/**Function generating random int.
Returns an integer between min...max values.
*/
#define RANDOM(min, max) \
((rand()%(int)(((max) + 1)-(min)))+ (min))
//-------------------------------------------------------------
enum State{RUN, READY, READY_STOPPED, BLOCKED, BLOCKED_STOPPED};
//-------------------------------------------------------------
class Process;
typedef vector<Process*>::type processListBase;
typedef vector<Process*>::iterator processListIterator;

class Resource;
typedef vector<Resource*>::type resourceListBase;
typedef vector<Resource*>::iterator resourceListIterator;

typedef vector<int>::type intListBase;
typedef vector<int>::iterator intListIterator;

typedef vector<String>::type ElementsBase;
typedef vector<String>::iterator ElementsIterator;

#include "Debug/LogManager.h"

#endif


